package com.iuie.ns.system.utils;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.iuie.ns.frame.exception.ServiceException;
import com.iuie.ns.frame.utils.ShiroUtils;
import com.iuie.ns.frame.utils.StringUtils;
import com.iuie.ns.system.beans.ReportParams;
import com.iuie.ns.system.utils.callback.QucikReportCallback;
import com.iuie.ns.system.utils.callback.QuickPieChartCallback;
import com.iuie.ns.system.vo.user.SysUserVO;

/**
 * 快速报表工具类
 * @author liujie
 * @date 2018年5月26日下午4:49:15
 */
public class QuickReportUtils {
	
	/**
	 * 柱状图
	 * @param params
	 * @param request
	 * @param callback
	 */
	public static void handle(Map<String, Object> params, HttpServletRequest request, QucikReportCallback callback) {
		if (callback == null) {
			throw new ServiceException("回调不能为空！");
		}
		String statisticsSize = request.getParameter("statisticsSize"); // 统计粒度，01：按日统计，02：按周统计，03：按月统计
		String statisticsRange = request.getParameter("statisticsRange"); // 统计范围
		
		// 统计粒度和统计范围不能为空
		if (StringUtils.isBlank(statisticsSize)) {
			throw new ServiceException("加载报表数据异常，报表的【统计粒度】为空！");
		}
		if (StringUtils.isBlank(statisticsRange)) {
			throw new ServiceException("加载报表数据异常，报表的【统计范围】为空！");
		}
		
		String startTime = request.getParameter("startTime"); // 用户设置的统计范围
		String endTime = request.getParameter("endTime"); // 用户设置的统计范围
		
		// 统计参数
		ReportParams sparams = ReportParams.getReportParams(statisticsSize, statisticsRange, startTime, endTime);
		
		SysUserVO user = (SysUserVO) ShiroUtils.getCurrentUser();
		String userId = user.getUserId();
		List<String> queryParams = sparams.getQueryParams(); // 查询参数
		List<String> categories = sparams.getCategories(); // 报表坐标轴标签数据
		List<Double> list = null;
		
		if (StringUtils.equals("01", statisticsSize)) { // 按日
			list = callback.accordDay(queryParams, userId);
		}
		if (StringUtils.equals("02", statisticsSize)) { // 按周
			list = callback.accordWeek(queryParams, userId);
		}
		if (StringUtils.equals("03", statisticsSize)) { // 按月
			list = callback.accordMonth(queryParams, userId);
		}
		params.put("data.categories", categories);
		params.put("series.data", list);
	}
	
	public static void handlePieChart(Map<String, Object> params, HttpServletRequest request, QuickPieChartCallback callback) {
		String statisticsSize = request.getParameter("statisticsSize"); // 统计粒度，01：按日统计，02：按周统计，03：按月统计
		String statisticsRange = request.getParameter("statisticsRange"); // 统计范围
		
		// 统计粒度和统计范围不能为空
		if (StringUtils.isBlank(statisticsSize)) {
			throw new ServiceException("加载报表数据异常，报表的【统计粒度】为空！");
		}
		if (StringUtils.isBlank(statisticsRange)) {
			throw new ServiceException("加载报表数据异常，报表的【统计范围】为空！");
		}
		
		String startTime = request.getParameter("startTime"); // 用户设置的统计范围
		String endTime = request.getParameter("endTime"); // 用户设置的统计范围
		
		// 只需要取到startTime 和 endTime(yyyy-MM-dd) 就可以了
		ReportParams sparams = ReportParams.getReportParams(statisticsSize, statisticsRange, startTime, endTime);
		
		SysUserVO user = (SysUserVO) ShiroUtils.getCurrentUser();
		
		List<Map<String, String>> list = callback.getReportData(sparams.startTime(), sparams.endTime(), user.getUserId());
		params.put("series.data", list);
	}
}
